For many years, electronic systems (e.g., networks, computer systems, printers, etc.) have been designed to allow multiple agents access to a single resource such as an interconnect bus or memory. These agents usually issue requests to gain exclusive access to the resource for a predetermined period of time. Typically, an arbitration circuit is required to arbitrate access to the resource between multiple requesting agents (i.e., agents simultaneously requesting access to the resource). After one of the requesting agents gains access to the resource, it performs a particular operation and relinquishes access of the resource upon completion of the particular operation or expiration of the predetermined time period, whichever occurs first.
In a computer system multiple agents typically arbitrate to gain access to the main memory. Memory traffic originated by a particular agent tends to be concentrated in one or more localized regions of the memory over a short period of time. Also, in the case of microprocessors (or processors), a significant fraction of processor requests are issued within a predetermined number of clock cycles as a previous processor request. Permitting the processor to immediately regain access to the memory would likely result in the subsequent processor request accessing the same page of memory as the previous processor request. Consequently, the overall access time of the memory by the processor would be substantially reduced.
However, in typical computer systems the arbiter grants access to another agent immediately after the memory has completed servicing the processor and the processor has no requests pending. Thus, the subsequent agent closes the page of memory in which the processor had accessed. Upon the processor regaining access to the memory, the previously closed page must be reopened before the memory may service the processor. This results in the increase of the amount of time that is necessary for the processor to access the memory. Accordingly, it would be desirable to provide an efficient method of selection of an agent by an arbiter in order to gain access to a memory.